package com.ybkj.daijia.server.service;

import com.ybkj.daijia.page.Page;
import com.ybkj.daijia.server.model.SmsRecord;
import com.ybkj.daijia.server.model.SmsSendBlackRecord;
import com.ybkj.daijia.server.model.SmsTemplet;
import com.ybkj.daijia.server.model.SmsTemplet.SmsType;
import java.util.Map;


public interface SmsService {

    SmsTemplet insertSmsTemplate(String name, String type, SmsTemplet smsTemplet);

    SmsTemplet findByAlias(Long companyId, SmsType smsType);

    SmsTemplet update(SmsTemplet smsTemplet);

    int sendSms(String phone, String alias, String variable, Long companyId, Integer type,
        String sign);

    Long batchSendSms(String phones, String message);

    Page<SmsRecord> queryByParam(String phone, String appName, Long startTime, Long endTime);

    Page<Map<String, Object>> queryRechargeRecord(Integer page, Integer limit);

    Long querySmsAppBalance();

    /**
     * 发送验证码
     *
     * @param IP                  接受者IP
     * @param phone               接受者电话
     * @param code                验证码
     * @param companyId           公司ID
     * @param companyAbbreviation 公司简称
     * @param companySignName     公司签名
     */
    public void sendSmsMsg(String IP, String phone, String code, Long companyId,
        String companyAbbreviation, String companySignName);

    /**
     * 控制风险
     * <br>
     * 同一个IP,3次重复输入一个手机号点击获取验验证码，则需要先经过图片验证才能再继续获取验证码
     *
     * @param imageCode
     * @param IP        发送IP
     * @param phone     发送手机号
     * @return 0: 图片验证码验证失败<br> 1: 没有风险，正常发送验证码<br> 2: 通知前台加载图片验证码或者前台没有传入图片验证码<br>
     */
    public int isDangerForSendVCode(String IP, String phone, String imageCode);

    /**
     * 验证图片验证码和发送短信验证码
     *
     * @param IP
     * @param phone
     * @param imageCode
     * @return 0: 图片验证码验证失败<br> 1: 发送短信成功<br> 2: 发送短信失败<br>
     */
    public boolean validateImgCode(String IP, String phone, String imageCode);

    /**
     * 回滚电话验证码使用图片验证码验证
     *
     * @param IP
     * @param phone
     */
    public boolean SmsSendBlackRecordCallBack(String IP, String phone);

    /**
     * 根据IP，手机号获取验证记录
     *
     * @param IP
     * @param phone
     * @return
     */
    public SmsSendBlackRecord queryBlackRecordByIPAndPhone(String IP, String phone);

    /**
     * 更新验证记录
     *
     * @param record
     * @return
     */
    public void updateBlackRecordById(SmsSendBlackRecord record);
}
